package nl.boektrust.btsoep.shared.model;


public enum AvailabilityCode {
	UNDEFINED,AVAILABLE,CANCELED,NOLONGERINSTOCK,
	POD,UNPUBLISHED,NEW,ALTERNATIVEFORMAT,RETIRED,
	SOLDOUT,REPLACED,ALTENATIVEVENDOR,REMAINDERED,
	REPRINT,SPECIALORDER,TEMP_OUTOFSTOCK_PUBLISHER,TEMP_OUTOFSTOCK;
	
	public static String stringValue(AvailabilityCode t) {
		String value = new String();
		switch (t) {
		case UNDEFINED: value = "Onbekend"; break;
		case AVAILABLE: value = "In voorraad"; break;
		case CANCELED: value = "Geannuleerd, publicatie zal niet verschijnen"; break;
		case NOLONGERINSTOCK: value = "Niet langer in voorraad bij ons"; break;
		case POD: value = "Wordt op bestelling geproduceerd; Boek op Verzoek"; break;
		case UNPUBLISHED: value = "Nog niet verschenen"; break;
		case NEW: value = "Nieuw opgenomen in de catalogus, nog niet in voorraad"; break;
		case ALTERNATIVEFORMAT: value = "Ander formaat verkrijgbaar"; break;
		case RETIRED: value = "Geen voorraad meer, geen plan voor herdruk"; break;
		case SOLDOUT: value = "Uitverkocht, uit fondslijst verwijderd"; break;
		case REPLACED: value = "Vervangen door een nieuwe editie"; break;
		case ALTENATIVEVENDOR: value = "Verwijzing naar andere leverancier"; break;
		case REMAINDERED: value = "In prijs opgeheven, verramsjt"; break;
		case REPRINT: value = "In herdruk"; break;
		case SPECIALORDER: value = "Product moet speciaal worden besteld"; break;
		case TEMP_OUTOFSTOCK_PUBLISHER: value = "Tijdelijk niet leverbaar, uitgever kan niet leveren"; break;
		case TEMP_OUTOFSTOCK: value = "Tijdelijk niet leverbaar"; break;
		}
		return value;
		
	}
	
	public static String stringValueForOnix(AvailabilityCode t) {
		String value = new String();
		switch (t) {
		case UNDEFINED: value = "?"; break;
		case AVAILABLE: value = "IP"; break;
		case CANCELED: value = "AB"; break;
		case NOLONGERINSTOCK: value = "EX"; break;
		case POD: value = "MD"; break;
		case UNPUBLISHED: value = "NP"; break;
		case NEW: value = "NY"; break;
		case ALTERNATIVEFORMAT: value = "OF"; break;
		case RETIRED: value = "OI"; break;
		case SOLDOUT: value = "OP"; break;
		case REPLACED: value = "OR"; break;
		case ALTENATIVEVENDOR: value = "RF"; break;
		case REMAINDERED: value = "RM"; break;
		case REPRINT: value = "RP"; break;
		case SPECIALORDER: value = "TO"; break;
		case TEMP_OUTOFSTOCK_PUBLISHER: value = "TP"; break;
		case TEMP_OUTOFSTOCK: value = "TU"; break;
		}
		return value;
		
	}
	
	/*
	 * function to translate between ONIX ProductAvailability and AvailabiltyCode
	 */
	public static AvailabilityCode parseIntIntoAvailabilityCode(int code) {
		AvailabilityCode c = AvailabilityCode.UNDEFINED;
		switch (code) {
		case 01:
			c = AvailabilityCode.CANCELED;
			break;

		case 20:
		case 21:
		case 22:
			c = AvailabilityCode.AVAILABLE;
			break;
		case 31:
			c = AvailabilityCode.NOLONGERINSTOCK;
			break;
		case 23:
			c = AvailabilityCode.POD;
			break;
		case 10:
			c = AvailabilityCode.UNPUBLISHED;
			break;
		case 32:
			c = AvailabilityCode.REPRINT;
			break;
		}
		return c;
	}

	
	public static AvailabilityCode parseStringIntoAvailabilityCode(String s) {
		for (AvailabilityCode c : AvailabilityCode.values()) {
			if (AvailabilityCode.stringValue(c).equals(s) == true) return c;
		}
		return UNDEFINED;
	}

}
